#ifndef PinDefH
#define PinDefH

#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.Menus.hpp>
#include <Vcl.ComCtrls.hpp>

/** Enum, welches das Ansprechen von bestimmten Pins vereinfacht
*/
enum Pin{
	INPUT_PIN_OL,
	INPUT_PIN_ML,
	INPUT_PIN_UL,
	OUTPUT_PIN_MR,
	OUTPUT_PIN_SCHALTER,
	ERROR_
};

/** Struktur, welche ein Rechteck aufspannt
* @brief Rechteck
* @author Nico Mutter
* @date 19.05.2012
*/
struct TRechteck{
	/** x-Koordinate der oberen linken Ecke des Rechtecks
	*/
	int left;

	/** y-Koordinate der oberen linken Ecke des Rechtecks
	*/
	int top;

	/** x-Koordinate der unteren rechten Ecke des Rechtecks
	*/
	int bottom;

	/** y-Koordinate der unteren rechten Ecke des Rechtecks
	*/
	int right;
};

/** Struktur, welche einen Punkt definiert (x,y)
* @brief Punkt
* @author Nico Mutter
* @date 19.05.2012
*/
struct TPunkt{
	/** x-Koordinate des Punktes
	*/
	int x;

	/** y-Koordinate des Punktes
	*/
	int y;
};

/** Klasse welche die Pin Definitionen verwaltet
 *
 *  @brief Pin Definitionen
 *
 *  @author Nico Mutter
 *  @date 19.05.2012
 *
 *  @version 0.1
 *  Doxygen Kommentare hinzugefuegt
 */
class PinDef{

	public:
	/** Gibt anhand von x-/ und y-Koordinaten den dazugehoerigen Pin zurueck
	* @param[in] x x-Koordinate
	* @param[in] y y-Koordinate
	* @param[in] typ Typ des Bauelements von dem die Koordinaten geprueft werden sollen
	* @return Pin-enum, welcher zu den x-/ y-Koordinaten gehoert
	*/
	static Pin getPinFromCoord(int x, int y, String typ);

	/** Gibt anhand von einem Pin die dazugehoerigen x-/ und y-Koordinaten zurueck
	* @param[in] pin Pin von dem man die Koordinaten erfahren moechte
	* @return TPunkt mit den geforderten Pin-Koordinaten
	*/
	static TPunkt* getPinPoint(Pin pin);

};

#endif

